# template_processor.py
import re
from docx import Document

# 定义提示词的正则表达式，例如 {{提示:内容}}
PROMPT_REGEX = re.compile(r"{{\s*提示:(.*?)\s*}}")

def load_template(file_path):
    """加载 .docx 模板文件"""
    try:
        doc = Document(file_path)
        return doc
    except Exception as e:
        print(f"错误：无法加载模板文件 {file_path}。原因: {e}")
        return None

def extract_prompts_from_doc(doc):
    """从 Document 对象中提取所有提示词"""
    prompts = []
    if not doc:
        return prompts

    for para in doc.paragraphs:
        matches = PROMPT_REGEX.findall(para.text)
        for match in matches:
            if match not in prompts: # 避免重复
                prompts.append(match.strip())

    # 也可以考虑从表格中提取，但MVP阶段先专注段落
    # for table in doc.tables:
    #     for row in table.rows:
    #         for cell in row.cells:
    #             for para_in_cell in cell.paragraphs:
    #                 matches = PROMPT_REGEX.findall(para_in_cell.text)
    #                 prompts.extend(matches)

    # 去重并保持顺序，如果需要的话，但findall后直接append到list，如果match本身不重复，则prompts不重复
    # unique_prompts = list(dict.fromkeys(prompts))
    return prompts


if __name__ == '__main__':
    # 测试代码
    # 创建一个临时的docx用于测试
    doc = Document()
    doc.add_paragraph("这是一个普通的段落。")
    doc.add_paragraph("项目背景：{{提示:请描述项目的背景信息}}，非常重要。")
    doc.add_paragraph("解决方案：{{提示:请阐述技术解决方案}} 和 {{提示:商业模式}}。")
    doc.add_paragraph("{{提示:请描述项目的背景信息}}") # 重复的提示
    temp_file_path = "d:\\code\\auto_pb\\auto_pb_app\\temp_test_template.docx"
    doc.save(temp_file_path)

    print(f"测试模板已保存到: {temp_file_path}")

    loaded_doc = load_template(temp_file_path)
    if loaded_doc:
        extracted = extract_prompts_from_doc(loaded_doc)
        print("提取到的提示词:")
        for p in extracted:
            print(f"- {p}")

    # 清理临时文件 (可选)
    # import os
    # os.remove(temp_file_path)